//
//  ViewController.m
//  UIPageViewControllerDemo
//
//  Created by SHB on 16/4/12.
//  Copyright © 2016年 Herb. All rights reserved.
//

#import "ViewController.h"
#import "ContentViewController.h"
#import "TYTextContainer.h"
#import "NSAttributedString+TReaderPage.h"
@interface ViewController () <UIPageViewControllerDelegate, UIPageViewControllerDataSource>
{
    NSString * _allStr;
}
@property (nonatomic, strong) UIPageViewController *pageViewController;
@property (nonatomic, strong) NSArray *pageContentArray;    // 数据源
@property (nonatomic, strong) NSAttributedString * attString;
@property (nonatomic, strong) NSArray * pageRangeArray;

@end

@implementation ViewController
- (void)viewDidLoad {
    [super viewDidLoad];

    // 设置UIPageViewController的配置项
    NSDictionary *options = @{UIPageViewControllerOptionInterPageSpacingKey : @(20)};
//    NSDictionary *options = @{UIPageViewControllerOptionSpineLocationKey : @(UIPageViewControllerSpineLocationMin)};
    // 根据给定的属性实例化UIPageViewController
//    _pageViewController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll
//                                                          navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal
//                                                                        options:options];
    _pageViewController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStylePageCurl
                                                          navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal
                                                                        options:options];
    // 设置UIPageViewController代理和数据源
    _pageViewController.delegate = self;
    _pageViewController.dataSource = self;
    // 让UIPageViewController对象，显示相应的页数据。
    // UIPageViewController对象要显示的页数据封装成为一个NSArray。
    // 因为我们定义UIPageViewController对象显示样式为显示一页（options参数指定）。
    // 如果要显示2页，NSArray中，应该有2个相应页数据。
    // 设置UIPageViewController初始化数据, 将数据放在NSArray里面
    // 如果 options 设置了 UIPageViewControllerSpineLocationMid,注意viewControllers至少包含两个数据,且 doubleSided = YES
    ContentViewController *initialViewController = [self viewControllerAtIndex:0];// 得到第一页
    NSArray *viewControllers = [NSArray arrayWithObject:initialViewController];
    NSLog(@"viewcontrollers%lu", viewControllers.count);
    [_pageViewController setViewControllers:viewControllers
                              direction:UIPageViewControllerNavigationDirectionReverse
                               animated:NO
                             completion:nil];
    // 设置UIPageViewController 尺寸
    _pageViewController.view.frame = self.view.bounds;
    // 在页面上，显示UIPageViewController对象的View
    [self addChildViewController:_pageViewController];  // 先添加一个子控制器
    [self.view addSubview:_pageViewController.view];    // 再添加子控制器的view
}

#pragma mark - UIPageViewControllerDataSource And UIPageViewControllerDelegate
#pragma mark 返回上一个ViewController对象
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController {
    
    NSUInteger index = [self indexOfViewController:(ContentViewController *)viewController];
    if ((index == 0) || (index == NSNotFound)) {
        return nil;
    }
    index--;
    // 返回的ViewController，将被添加到相应的UIPageViewController对象上。
    // UIPageViewController对象会根据UIPageViewControllerDataSource协议方法,自动来维护次序
    // 不用我们去操心每个ViewController的顺序问题
    return [self viewControllerAtIndex:index];
    
}

#pragma mark 返回下一个ViewController对象
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController {
    NSUInteger index = [self indexOfViewController:(ContentViewController *)viewController];
    if (index == NSNotFound) {
        return nil;
    }
    index++;
    if (index == [self.pageContentArray count]) {
        return nil;
    }
    return [self viewControllerAtIndex:index];
}

#pragma mark - 根据index得到对应的UIViewController
- (ContentViewController *)viewControllerAtIndex:(NSUInteger)index {
    
    if (([self.pageContentArray count] == 0) || (index >= [self.pageContentArray count])) {
        return nil;
    }
    // 创建一个新的控制器类，并且分配给相应的数据
    ContentViewController *contentVC = [[ContentViewController alloc] init];
    contentVC.content = [self.pageContentArray objectAtIndex:index];    // 对每个页面的数据进行赋值
    return contentVC;
}
#pragma mark - 数组元素值，得到下标值
- (NSUInteger)indexOfViewController:(ContentViewController *)viewController {
    return [self.pageContentArray indexOfObject:viewController.content];
}
#pragma mark --- 懒加载
- (NSArray *)pageContentArray{
    if (!_pageContentArray) {
        NSMutableArray * arrayM = [NSMutableArray array];
        NSString * allStr = @"第一章成功  色的圣诞节啊六块腹肌卢卡斯鸡窝IE u 染发啊快乐健康啊阿萨德肌肤啊书籍风口浪尖啊书即可将面膜放啊斯捷克洛夫就破万卷书看大家发；爱上啊圣诞快乐放假啊老师可敬可嘉维科家纺啊接口设计饭撒 加饭撒0午饭啊设计饭；啊饭撒进了开发建设了卡卡上飞机啊；女模if 家啊设计发生就是短发快乐放假时打开姐姐看见就看见卡斯捷克洛夫； 啊饭快睡觉啊的刘恺威藕粉 i 哦妈妈们没法看了萨摩蜜蜂们撒卡上都快放假啊书斤斤计较这么难吗姐姐皮哦额外积分吗啊来交罚款睡懒觉啊设计发生接口饭啊上岛咖啡解决了；啊；你离开家啊；饭卡设计欧具体家啊看见节啊六块腹肌卢卡斯鸡窝IE u 染发啊快乐健康啊阿萨德肌肤啊书籍风口浪尖啊书即可将面膜放啊斯捷克洛夫就破万卷书看大家发；爱上啊圣诞快乐放假啊老师可敬可嘉维科家纺啊接口设计饭撒 加饭撒0午饭啊设计饭；啊饭撒进了开发建设了卡卡上飞机啊；女模if 家啊设计发生就是短发快乐放假时打开姐姐看见就看见卡斯捷克洛夫； 啊饭快睡觉啊的刘恺威藕粉 i 哦妈妈们没法看了萨摩蜜蜂们撒卡上都快放假啊书斤斤计较这么难吗姐姐皮哦额外积分吗啊来交罚款睡懒觉啊设计发生接口饭啊上岛咖啡解决了；啊；你离开家啊；饭卡设计欧具体家啊看见节啊六块腹肌卢卡斯鸡窝IE u 染发啊快乐健康啊阿萨德肌肤啊书籍风口浪尖啊书即可将面膜放啊斯捷克洛夫就破万卷书看大家发；爱上啊圣诞快乐放假啊老师可敬可嘉维科家纺啊接口设计饭撒 加饭撒0午饭啊设计饭；啊饭撒进了开发建设了卡卡上飞机啊；女模if 家啊设计发生就是短发快乐放假时打开姐姐看见就看见卡斯捷克洛夫； 啊饭快睡觉啊的刘恺威藕粉 i 哦妈妈们没法看了萨摩蜜蜂们撒卡上都快放假啊书斤斤计较这么难吗姐姐皮哦额外积分吗啊来交罚款睡懒觉啊设计发生接口饭啊上岛咖啡解决了；啊；你离开家啊；饭卡设计欧具体家啊看见节啊六块腹肌卢卡斯鸡窝IE u 染发啊快乐健康啊阿萨德肌肤啊书籍风口浪尖啊书即可将面膜放啊斯捷克洛夫就破万卷书看大家发；爱上啊圣诞快乐放假啊老师可敬可嘉维科家纺啊接口设计饭撒 加饭撒0午饭啊设计饭；啊饭撒进了开发建设了卡卡上飞机啊；女模if 家啊设计发生就是短发快乐放假时打开姐姐看见就看见卡斯捷克洛夫； 啊饭快睡觉啊的刘恺威藕粉 i 哦妈妈们没法看了萨摩蜜蜂们撒卡上都快放假啊书斤斤计较这么难吗姐姐皮哦额外积分吗啊来交罚款睡懒觉啊设计发生接口饭啊上岛咖啡解决了；啊；你离开家啊；饭卡设计欧具体家啊看见节啊六块腹肌卢卡斯鸡窝IE u 染发啊快乐健康啊阿萨德肌肤啊书籍风口浪尖啊书即可将面膜放啊斯捷克洛夫就破万卷书看大家发；爱上啊圣诞快乐放假啊老师可敬可嘉维科家纺啊接口设计饭撒 加饭撒0午饭啊设计饭；啊饭撒进了开发建设了卡卡上飞机啊；女模if 家啊设计发生就是短发快乐放假时打开姐姐看见就看见卡斯捷克洛夫； 啊饭快睡觉啊的刘恺威藕粉 i 哦妈妈们没法看了萨摩蜜蜂们撒卡上都快放假啊书斤斤计较这么难吗姐姐皮哦额外积分吗啊来交罚款睡懒觉啊设计发生接口饭啊上岛咖啡解决了；啊；你离开家啊；饭卡设计欧具体家啊看见节啊六块腹肌卢卡斯鸡窝IE u 染发啊快乐健康啊阿萨德肌肤啊书籍风口浪尖啊书即可将面膜放啊斯捷克洛夫就破万卷书看大家发；爱上啊圣诞快乐放假啊老师可敬可嘉维科家纺啊接口设计饭撒 加饭撒0午饭啊设计饭；啊饭撒进了开发建设了卡卡上飞机啊；女模if 家啊设计发生就是短发快乐放假时打开姐姐看见就看见卡斯捷克洛夫； 啊饭快睡觉啊的刘恺威藕粉 i 哦妈妈们没法看了萨摩蜜蜂们撒卡上都快放假啊书斤斤计较这么难吗姐姐皮哦额外积分吗啊来交罚款睡懒觉啊设计发生接口饭啊上岛咖啡解决了；啊；你离开家啊；饭卡设计欧具体家啊看见节啊六块腹肌卢卡斯鸡窝IE u 染发啊快乐健康啊阿萨德肌肤啊书籍风口浪尖啊书即可将面膜放啊斯捷克洛夫就破万卷书看大家发；爱上啊圣诞快乐放假啊老师可敬可嘉维科家纺啊接口设计饭撒 加饭撒0午饭啊设计饭；啊饭撒进了开发建设了卡卡上飞机啊；女模if 家啊设计发生就是短发快乐放假时打开姐姐看见就看见卡斯捷克洛夫； 啊饭快睡觉啊的刘恺威藕粉 i 哦妈妈们没法看了萨摩蜜蜂们撒卡上都快放假啊书斤斤计较这么难吗姐姐皮哦额外积分吗啊来交罚款睡懒觉啊设计发生接口饭啊上岛咖啡解决了；啊；你离开家啊；饭卡设计欧具体家啊看见哈哈看哈哈哈看啊接口浪费啊接口拉开哈哈😄哈哈哈哈哈哈哈哈哈哈哈哈放沙拉酱发就看见啊上烤豆腐接口连接啊上口服液推荐啊考均你妈和 v 自己呢解决福建师大就放假啊家哦我姐姐 啊设计饭家啊上经济法啊上了飞机撒饭就啊啦放假啊帅哭了多久发家啊索科洛夫健康的撒娇饭都是疯狂的螺蛳粉了开发建设了卡卡上飞机啊；女模if 家啊设计发生就是短发快乐放假时打开姐姐看见就看见卡斯捷克洛夫； 啊饭快睡觉啊的刘恺威藕粉 i 哦妈妈们没法看了萨摩蜜蜂们撒卡上都快放假啊书斤斤计较这么难吗姐姐皮哦额外积分吗啊来交罚款睡懒觉啊设计发生接口饭啊上岛咖啡解决了；啊；你离开家啊；饭卡设计欧具体家啊看见节啊六块腹肌卢卡斯鸡窝IE u 染发啊快乐健康啊阿萨德肌肤啊书籍风口浪尖啊书即可将面膜放啊斯捷克洛夫就破万卷书看大家发；爱上啊圣诞快乐放假啊老师可敬可嘉维科家纺啊接口设计饭撒 加饭撒0午饭啊设计饭；啊饭撒进了开发建设了卡卡上飞机啊；女模if 家啊设计发生就是短发快乐放假时打开姐姐看见就看见卡斯捷克洛夫； 啊饭快睡觉啊的刘恺威藕粉 i 哦妈妈们没法看了萨摩蜜蜂们撒卡上都快放假啊书斤斤计较这么难吗姐姐皮哦额外积分吗啊来交罚款睡懒觉啊设计发生接口饭啊上岛咖啡解决了；啊；你离开家啊；饭卡设计欧具体家啊看见哈哈看哈哈哈看啊接口浪费啊接口拉开哈哈😄哈哈哈哈哈哈哈哈哈哈哈哈放沙拉酱发就看见啊上烤豆腐接口连接啊上口服液推荐啊考均你妈和 v 自己呢解决福建师大就放假啊家哦我姐姐 啊设计饭家啊上经济法啊上了飞机撒饭就啊啦放假啊帅哭了多久发家啊索科洛夫健康的撒娇饭都是疯狂的螺蛳";
        _allStr = allStr;
        _allStr = allStr;
        TYTextContainer *textContainer = [[TYTextContainer alloc]init];
        textContainer.text = allStr;
        [textContainer createAttributedString];
        _attString = [textContainer createAttributedString];
        CGSize renderSize = CGSizeMake(self.view.frame.size.width, 600);
        _pageRangeArray = [_attString pageRangeArrayWithConstrainedToSize:renderSize];
        for (NSInteger i = 0; i < _pageRangeArray.count; i ++) {
            NSRange range = [_pageRangeArray[i] rangeValue];
            NSString * str = [_allStr substringWithRange:range];
            [arrayM addObject:str];
        }
        _pageContentArray = [[NSArray alloc] initWithArray:arrayM];
    }
    return _pageContentArray;
}
@end
